home *** CD-ROM | disk | FTP | other *** search
/ Workbench Add-On / Workbench Add-On - Volume 1.iso / Dev / Oberon / source / FPE / ToolDlg.mod < prev    next >
Text File  |  1995-06-29  |  6KB  |  226 lines

  1. (***************************************************************************
  2.  
  3.      $RCSfile: ToolDlg.mod $
  4.   Description: Defines and implements the tool editor dialog.
  5.  
  6.    Created by: fjc (Frank Copeland)
  7.     $Revision: 1.10 $
  8.       $Author: fjc $
  9.         $Date: 1995/01/26 00:15:33 $
  10.  
  11.   Copyright © 1993-1994, Frank Copeland.
  12.   This file is part of FPE.
  13.   See FPe.doc for conditions of use and distribution.
  14.  
  15.   Log entries are at the end of the file.
  16.  
  17. ***************************************************************************)
  18.  
  19. <* MAIN- *> <*$ LongVars+ *> <*$ NilChk- *>
  20.  
  21. MODULE ToolDlg;
  22.  
  23. IMPORT
  24.   SYS := SYSTEM, e := Exec, i := Intuition, ev := Events, is := IntuiSup,
  25.   isu := IntuiSupUtil, ise := ISupEvents, Data, tpl := ToolDlgTpl;
  26.  
  27. (* ===== Dialog ===== *)
  28.  
  29. TYPE
  30.  
  31.   Dialog *= POINTER TO DialogRec;
  32.   DialogRec = RECORD (ise.ISupDialogRec)
  33.     accepted *: BOOLEAN;
  34.     template  : tpl.Template;
  35.     toolInfo  : Data.ToolInfo;
  36.   END; (* Dialog *)
  37.  
  38.   DialogPort = POINTER TO DialogPortRec;
  39.   DialogPortRec = RECORD (ise.ISupPortRec)
  40.     dlg : Dialog
  41.   END; (* DialogPortRec *)
  42.  
  43. CONST
  44.  
  45.   (* Gadget ID's *)
  46.  
  47.   ButtonID     =  0;
  48.   CommandID    =  1;
  49.   ArgumentsID  =  2;
  50.   IsActiveID   =  3;
  51.   HasConsoleID =  4;
  52.   ConsoleID    =  5;
  53.   StackID      =  6;
  54.   AcceptID     =  7;
  55.   CancelID     =  8;
  56.  
  57.   (* Requester definitions *)
  58.  
  59.   RequesterTitle = "Tool information";
  60.  
  61. (*------------------------------------*)
  62. PROCEDURE (dp : DialogPort) HandleISup
  63.   ( msg : i.IntuiMessagePtr )
  64.   : INTEGER;
  65.  
  66.   VAR gadget : INTEGER; string : e.LSTRPTR; value : LONGINT;
  67.       gadgetList : is.GadgetList; result : INTEGER;
  68.  
  69. BEGIN (* HandleISup *)
  70.   result := ev.Continue;
  71.   gadget := msg.code;
  72.   string := msg.iAddress;
  73.   value := SYS.VAL (LONGINT, msg.iAddress);
  74.   gadgetList := SYS.VAL (is.GadgetList, msg.specialLink);
  75.  
  76.   CASE gadget OF
  77.     ButtonID: COPY (string^, dp.dlg.toolInfo.title);
  78.     |
  79.     CommandID: COPY (string^, dp.dlg.toolInfo.command);
  80.     |
  81.     ArgumentsID: COPY (string^, dp.dlg.toolInfo.arguments);
  82.     |
  83.     IsActiveID:
  84.       IF value = 0 THEN dp.dlg.toolInfo.isActive := FALSE
  85.       ELSE dp.dlg.toolInfo.isActive := TRUE
  86.       END
  87.     |
  88.     HasConsoleID:
  89.       IF value = 0 THEN
  90.         dp.dlg.toolInfo.hasConsole := FALSE;
  91.         dp.dlg.toolInfo.console := "";
  92.         isu.DisableGadget (gadgetList, ConsoleID, TRUE);
  93.       ELSE
  94.         dp.dlg.toolInfo.hasConsole := TRUE;
  95.         isu.DisableGadget (gadgetList, ConsoleID, FALSE);
  96.       END
  97.     |
  98.     ConsoleID: COPY (string^, dp.dlg.toolInfo.console);
  99.     |
  100.     StackID: dp.dlg.toolInfo.stack := value;
  101.     |
  102.     AcceptID: dp.dlg.accepted := TRUE; result := ev.Stop
  103.     |
  104.     CancelID: dp.dlg.accepted := FALSE; result := ev.Stop
  105.     |
  106.   END; (* CASE gadget *)
  107.  
  108.   is.ReplyMsg (msg);
  109.   RETURN result
  110. END HandleISup;
  111.  
  112. (*------------------------------------*)
  113. PROCEDURE MakeDialog * (VAR toolDlg : Dialog);
  114.  
  115.   VAR dp : DialogPort;
  116.  
  117. BEGIN (* MakeDialog *)
  118.   NEW (toolDlg);
  119.   tpl.InitTemplate (toolDlg.template);
  120.   toolDlg.reqData.title := SYS.ADR (RequesterTitle);
  121.   toolDlg.reqData.width := tpl.Width;
  122.   toolDlg.reqData.height := tpl.Height;
  123.   toolDlg.reqData.flags := {};
  124.   toolDlg.template.GadgetData.g0.default :=
  125.     SYS.ADR(toolDlg.toolInfo.title);
  126.   toolDlg.template.GadgetData.g1.default :=
  127.     SYS.ADR(toolDlg.toolInfo.command);
  128.   toolDlg.template.GadgetData.g2.default :=
  129.     SYS.ADR(toolDlg.toolInfo.arguments);
  130.   toolDlg.template.GadgetData.g6.default :=
  131.     SYS.ADR(toolDlg.toolInfo.console);
  132.   EXCL (toolDlg.reqData.flags, is.rdCenterWindow);
  133.   toolDlg.reqData.leftEdge := 40;
  134.   toolDlg.reqData.topEdge := 20;
  135.   toolDlg.reqData.gadgets :=
  136.     SYS.VAL (is.GadgetDataPtr, toolDlg.template.GadgetData);
  137.   NEW (dp); ASSERT (dp # NIL, 137);
  138.   dp.dlg := toolDlg;
  139.   toolDlg.iSupPort := dp;
  140. END MakeDialog;
  141.  
  142. (*------------------------------------*)
  143. PROCEDURE FreeDialog * (VAR toolDlg : Dialog);
  144.  
  145. BEGIN (* FreeDialog *)
  146.   tpl.CleanupTemplate (toolDlg.template);
  147.   SYS.DISPOSE (toolDlg.iSupPort); SYS.DISPOSE (toolDlg);
  148. END FreeDialog;
  149.  
  150. (*------------------------------------*)
  151. PROCEDURE Activate *
  152.   ( toolDlg      : Dialog;
  153.     VAR toolInfo : Data.ToolInfo;
  154.     window       : i.WindowPtr);
  155.  
  156.   (*------------------------------------*)
  157.   PROCEDURE SetupGadgets ();
  158.  
  159.   BEGIN (* SetupGadgets *)
  160.     IF toolInfo.isActive THEN
  161.       toolDlg.template.GadgetData.g3.selected := 1;
  162.     ELSE
  163.       toolDlg.template.GadgetData.g3.selected := 0;
  164.     END; (* ELSE *)
  165.     IF toolInfo.hasConsole THEN
  166.       toolDlg.template.GadgetData.g4.selected := 1;
  167.       EXCL (toolDlg.template.GadgetData.g6.flags, is.gdDisabled);
  168.     ELSE
  169.       toolDlg.template.GadgetData.g4.selected := 0;
  170.       INCL (toolDlg.template.GadgetData.g6.flags, is.gdDisabled);
  171.       toolInfo.console := "";
  172.     END; (* ELSE *)
  173.     toolDlg.template.GadgetData.g8.default :=
  174.       SYS.VAL (e.APTR, toolDlg.toolInfo.stack);
  175.   END SetupGadgets;
  176.  
  177. BEGIN (* Activate *)
  178.   ASSERT (toolDlg # NIL, 137);
  179.   toolDlg.toolInfo := toolInfo; toolDlg.accepted := FALSE;
  180.   SetupGadgets ();
  181.   IF ise.Activate (toolDlg, window) THEN
  182.     IF toolDlg.accepted THEN toolInfo := toolDlg.toolInfo END
  183.   ELSE
  184.     isu.DoNotice (NIL, SYS.ADR ("ToolDlg"), "Failed to open dialog")
  185.   END;
  186. END Activate;
  187.  
  188. END ToolDlg.
  189.  
  190. (***************************************************************************
  191.  
  192.   $Log: ToolDlg.mod $
  193.   Revision 1.10  1995/01/26  00:15:33  fjc
  194.   - Release 1.5
  195.  
  196.   Revision 1.9  1994/09/25  18:20:54  fjc
  197.   - Uses new syntax for external code declarations
  198.  
  199.   Revision 1.8  1994/08/08  16:14:16  fjc
  200.   Release 1.4
  201.  
  202.   Revision 1.7  1994/06/21  22:06:36  fjc
  203.   - HandleISup was RETURNing without calling ReplyIMsg().
  204.  
  205.   Revision 1.6  1994/06/17  17:26:27  fjc
  206.   - Updated for release
  207.  
  208.   Revision 1.5  1994/06/09  13:46:29  fjc
  209.   - [bug] Event handler was using the cooked message from
  210.     IntuiSup *after* replying to it.
  211.  
  212.   Revision 1.4  1994/06/04  23:49:52  fjc
  213.   - Changed to use new Amiga interface
  214.  
  215.   Revision 1.3  1994/05/12  21:26:09  fjc
  216.   - Prepared for release
  217.  
  218.   Revision 1.2  1994/01/24  14:33:33  fjc
  219.   Changed to conform with changes in Module Handlers:
  220.     Handler procedures now reply to any messages they handle
  221.  
  222.   Revision 1.1  1994/01/15  17:32:38  fjc
  223.   Start of revision control
  224.  
  225. ***************************************************************************)
  226.